function trigger_slot_28() /* entry=394 class_id=0x0A18 slot=0x28 */
{
  var
    referent, /* [BP+00h] type=0x69 */
    ref, /* [BP+0Ah] type=0x69 */
    qHi, /* [BP+0Ch] type=0x69 */
    npcNum, /* [BP+0Eh] type=0x69 */
    mapNum, /* [BP+10h] type=0x69 */
    baseLink, /* [BP+12h] type=0x69 */
    searchtype, /* [BP+14h] type=0x69 */
    scmd, /* [BP-02h] type=0x69 */
    cmd, /* [BP-04h] type=0x69 */
    a, /* [BP-06h] type=0x69 */
    b, /* [BP-08h] type=0x69 */
    c, /* [BP-0Ah] type=0x69 */
    d, /* [BP-0Ch] type=0x69 */
    item, /* [BP-0Eh] type=0x24 */
    aitem, /* [BP-10h] type=0x24 */
    newLink, /* [BP-12h] type=0x69 */
    item2; /* [BP-14h] type=0x24 */

  entry:
    set_info(0x021B, 0);
    newLink = baseLink;
    aitem = ref;
    cmd = (mapNum & 3);
    if (cmd != 0) goto block_2972;

  block_293C:
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2959:
    if condition goto block_296D;

  block_295C:
    /* loopnext  */
    goto block_2959;

  block_296D:
    goto block_2DB1;

  block_2972:
    if (cmd != 1) goto block_29B0;

  block_297A:
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2997:
    if condition goto block_29AB;

  block_299A:
    /* loopnext  */
    goto block_2997;

  block_29AB:
    goto block_2DB1;

  block_29B0:
    if (cmd != 2) goto block_29F0;

  block_29B8:
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_29D5:
    if condition goto block_29EB;

  block_29D8:
    /* loopnext  */
    goto block_29D5;

  block_29EB:
    goto block_2DB1;

  block_29F0:
    if (cmd != 3) goto block_2DB1;

  block_29F8:
    scmd = (qHi & 7);
    if (scmd != 0) goto block_2A87;

  block_2A0A:
    d = (qHi / 8);
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2A32:
    if condition goto block_2A82;

  block_2A35:
    a = Item.hurl(item);
    c = (a & 15);
    b = Item.getMapNum(item);
    b = (((a & 0x00E0) * 8) + b);
    class_0A0C_slot_30(d, c, b, item);
    /* loopnext  */
    goto block_2A32;

  block_2A82:
    goto block_2DAE;

  block_2A87:
    if (scmd != 1) goto block_2BD5;

  block_2A8F:
    d = (qHi / 8);
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2AB6:
    if condition goto block_2BD0;

  block_2AB9:
    if (d != 31) goto block_2AFF;

  block_2AD1:
    suspend;
    goto block_2BCC;

  block_2AFF:
    c = Item.getFrame(item);
    b = Intrinsic0016(item);
    a = (b & 0x00FF);
    b = (b & 0x0700);
    b = (b / 8);
    b = (b + c);
    suspend;
    /* bit_not  */

  block_2BCC:
    /* loopnext  */
    goto block_2AB6;

  block_2BD0:
    goto block_2DAE;

  block_2BD5:
    if (scmd != 2) goto block_2C1D;

  block_2BDD:
    a = (qHi / 8);
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2C04:
    if condition goto block_2C18;

  block_2C07:
    /* loopnext  */
    goto block_2C04;

  block_2C18:
    goto block_2DAE;

  block_2C1D:
    if (scmd != 3) goto block_2C6C;

  block_2C25:
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2C42:
    if condition goto block_2C67;

  block_2C45:
    a = (qHi / 8);
    spawn class_0A18_slot_22(a, item, arg_06);
    /* loopnext  */
    goto block_2C42;

  block_2C67:
    goto block_2DAE;

  block_2C6C:
    if (scmd != 4) goto block_2C8B;

  block_2C74:
    a = (qHi / 8);
    newLink = (newLink + a);
    goto block_2DAE;

  block_2C8B:
    if (scmd != 5) goto block_2CAA;

  block_2C93:
    a = (qHi / 8);
    newLink = (newLink - a);
    goto block_2DAE;

  block_2CAA:
    if (scmd != 6) goto block_2DAE;

  block_2CB2:
    d = (qHi / 8);
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x3D */
    /* loopscr value_u8=0x40 */
    /* loopscr value_u8=0x25 */
    /* loop current_var=0xF2 string_bytes=0x6 loop_type=0x2 */

  block_2CDA:
    if condition goto block_2DA9;

  block_2CDD:
    a = Intrinsic0111(item);
    c = (a & 15);
    b = Item.getMapNum(item);
    b = (((a & 0x00E0) * 8) + b);
    if (b != 0) goto block_2DA5;

  block_2D1F:
    if (Item.getQLo(c, b, item2) != 1) goto block_2DA5;

  block_2D35:
    suspend;

  block_2DA5:
    /* loopnext  */
    goto block_2CDA;

  block_2DA9:
    goto block_2DAE;

  block_2DAE:
    goto block_2DB1;

  block_2DB1:
    /* word_to_dword  */
    /* pop_result  */
    goto block_2DBB;

  block_2DBB:
    return;

}
