function blastpac_use() /* entry=207 class_id=0x039B slot=0x01 */
{
  var
    referent, /* [BP+00h] type=0x69 */
    InCrouch, /* [BP-01h] type=0x62 */
    Blastpac, /* [BP-03h] type=0x24 */
    target, /* [BP-05h] type=0x24 */
    item, /* [BP-07h] type=0x24 */
    counter, /* [BP-09h] type=0x69 */
    lastAnim, /* [BP-0Bh] type=0x69 */
    xOff, /* [BP-0Dh] type=0x69 */
    yOff, /* [BP-0Fh] type=0x69 */
    mine; /* [BP-11h] type=0x24 */

  entry:
    set_info(0x0207, *(arg_06));
    process_exclude();
    Blastpac = *(arg_06);
    set_info(0x00F0, 0);
    /* global_address global_id=0x3C */
    lastAnim = Actor.getLastAnimSet();

  block_011D:
    /* global_address global_id=0x3C */
    if Actor.isBusy() goto block_0153;

  block_012D:
    spawn FREE.waitNTimerTicks(pid, 2, 0x00000000);
    suspend;
    goto block_011D;

  block_0153:
    /* loop_selector item in nearby_items(shape=0x053A, origin=global[0x003C]) */

  block_0171:
    if condition goto block_0233;

  block_0174:
    target = item;

  block_017B:
    FREE.slot_29(target, global[0x003C]);
    if ((retval > 3) && (counter != 6)) goto block_01FC;

  block_019E:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    spawn NPC.slot_22(Item.getDirFromTo16(Item.getX(pid, 1, Item.getY(Item.getY(target), Item.getX(target)))));
    suspend;
    counter = (1 + counter);
    goto block_017B;

  block_01FC:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    suspend;
    goto block_0233;

  block_022F:
    /* loopnext  */
    goto block_0171;

  block_0233:
    if (Actor.getDir() == 0) {
      xOff = -1;
      yOff = -3;
    }
    else if (Actor.getDir() == 1) {
      xOff = 0;
      yOff = -3;
    }
    else if (Actor.getDir() == 2) {
      xOff = 1;
      yOff = -3;
    }
    else if (Actor.getDir() == 3) {
      xOff = 2;
      yOff = -2;
    }
    else if (Actor.getDir() == 4) {
      xOff = 2;
      yOff = -1;
    }
    else if (Actor.getDir() == 5) {
      xOff = 2;
      yOff = 0;
    }
    else if (Actor.getDir() == 6) {
      xOff = 2;
      yOff = 2;
    }
    else if (Actor.getDir() == 7) {
      xOff = 0;
      yOff = 2;
    }
    else if (Actor.getDir() == 8) {
      xOff = -1;
      yOff = 2;
    }
    else if (Actor.getDir() == 9) {
      xOff = -2;
      yOff = 2;
    }
    else if (Actor.getDir() == 10) {
      xOff = -3;
      yOff = 2;
    }
    else if (Actor.getDir() == 11) {
      xOff = -3;
      yOff = 1;
    }
    else if (Actor.getDir() == 12) {
      xOff = -3;
      yOff = 0;
    }
    else if (Actor.getDir() == 13) {
      xOff = -3;
      yOff = -1;
    }
    else if (Actor.getDir() == 14) {
      xOff = -3;
      yOff = -2;
    }
    else if (Actor.getDir() == 15) {
      xOff = -3;
      yOff = -3;
    }

  block_0415:
    if target goto block_061D;

  block_041D:
    /* global_address global_id=0x3C */
    if Actor.getSomeFlagProbablyCrouch() goto block_0437;

  block_042D:
    InCrouch = 1;
    goto block_046E;

  block_0437:
    InCrouch = 0;
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    suspend;

  block_046E:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    spawn BLASTPAC.slot_20(mine, arg_06);

  block_04C5:
    /* global_address global_id=0x3C */
    if Actor.isBusy() goto block_04FB;

  block_04D5:
    spawn FREE.waitNTimerTicks(pid, 2, 0x00000000);
    suspend;
    goto block_04C5;

  block_04FB:
    spawn FREE.slot_21(pid, 13, 0x00000000);
    suspend;
    if (!InCrouch) goto block_05C5;

  block_052A:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    suspend;
    if target goto block_05C2;

  block_0562:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    suspend;
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    suspend;

  block_05C2:
    goto block_061A;

  block_05C5:
    spawn FREE.slot_21(pid, 0x00B0, 0x00000000);
    suspend;

  block_061A:
    goto block_0672;

  block_061D:
    spawn FREE.slot_21(pid, 0x00B0, 0x00000000);
    suspend;

  block_0672:
    return;

}
