function fuspac_use() /* entry=208 class_id=0x039C slot=0x01 */
{
  var
    referent, /* [BP+00h] type=0x69 */
    InCrouch, /* [BP-01h] type=0x62 */
    droppedPac, /* [BP-02h] type=0x62 */
    Fusionpac, /* [BP-04h] type=0x24 */
    target, /* [BP-06h] type=0x24 */
    item, /* [BP-08h] type=0x24 */
    counter, /* [BP-0Ah] type=0x69 */
    lastAnim, /* [BP-0Ch] type=0x69 */
    xOff, /* [BP-0Eh] type=0x69 */
    yOff, /* [BP-10h] type=0x69 */
    mine, /* [BP-12h] type=0x24 */
    door; /* [BP-14h] type=0x24 */

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

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

  block_0127:
    spawn FREE.waitNTimerTicks(pid, 2, 0x00000000);
    suspend;
    goto block_0117;

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

  block_016B:
    if condition goto block_022D;

  block_016E:
    target = item;

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

  block_0198:
    /* 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_0175;

  block_01F6:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    suspend;
    goto block_022D;

  block_0229:
    /* loopnext  */
    goto block_016B;

  block_022D:
    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_040F:
    if (!target) goto block_0481;

  block_0418:
    spawn FREE.slot_21(pid, 0x00B0, 0x00000000);
    suspend;
    goto block_0772;

  block_047E:
    goto block_0772;

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

  block_0491:
    InCrouch = 1;
    goto block_04D2;

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

  block_04D2:
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    /* global_address global_id=0x3C */
    droppedPac = 1;

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

  block_053C:
    spawn FREE.waitNTimerTicks(pid, 2, 0x00000000);
    suspend;
    goto block_052C;

  block_0562:
    if droppedPac goto block_0772;

  block_056A:
    /* str_to_ptr  */
    /* free_stack_string value_u8=0x4 target=[SP+04h] */
    suspend;
    /* pop_global global_id=0x26 size=0x1 */
    spawn FREE.slot_24(1, 100, 0x00000000);
    /* loop_selector item in nearby_items(shape=0x0476, origin=global[0x003C]) */

  block_05DE:
    if condition goto block_0609;

  block_05E1:
    if (Item.getQLo(item) != 33) goto block_0605;

  block_05F6:
    FREE.slot_2F(0x03B5, item);

  block_0605:
    /* loopnext  */
    goto block_05DE;

  block_0609:
    for item in selector_0x42(arg0=0x032A, arg1=0x0329, arg2=(50 * 32), origin=global[0x003C]) {
      /* loopnext  */
    }

  block_0652:
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x41 */
    /* loop current_var=0xF8 string_bytes=0x4 loop_type=0x2 */

  block_0670:
    if condition goto block_06B2;

  block_0673:
    if (Item.getQLo(item) != 10) goto block_06AE;

  block_0688:
    door = item;
    spawn DOOR.slot_20(pid, door);
    suspend;

  block_06AE:
    /* loopnext  */
    goto block_0670;

  block_06B2:
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x41 */
    /* loop current_var=0xF8 string_bytes=0x4 loop_type=0x2 */

  block_06CF:
    if condition goto block_0706;

  block_06D2:
    if (Item.getQLo(item) != 0x00FB) goto block_0702;

  block_06E8:

  block_0702:
    /* loopnext  */
    goto block_06CF;

  block_0706:
    for item in nearby_items(shape=0x04D0, origin=arg_06) {
      if ((Item.getFrame(item) == 0) && (Item.getQLo(item) != 47)) {
        suspend;
      }
      /* loopnext  */
    }

  block_0770:

  block_0772:
    return;

}
