function blaser_slot_20() /* entry=372 class_id=0x0A02 slot=0x20 */
{
  var
    referent, /* [BP+00h] type=0x69 */
    ref, /* [BP+0Ah] type=0x69 */
    wp, /* [BP-05h] type=0x24 */
    laserList, /* [BP-07h] type=0x6C */
    item, /* [BP-09h] type=0x24 */
    inFastArea, /* [BP-0Bh] type=0x69 */
    dir, /* [BP-0Dh] type=0x69 */
    count, /* [BP-0Fh] type=0x69 */
    h, /* [BP-11h] type=0x69 */
    link, /* [BP-13h] type=0x69 */
    x, /* [BP-15h] type=0x69 */
    y; /* [BP-17h] type=0x69 */

  entry:
    set_info(1, 0);
    item = ref;
    link = Item.pop(item);
    count = 0;
    /* loopscr value_u8=0x24 */
    /* loopscr value_u8=0x42 */
    /* loop current_var=0xF7 string_bytes=0x6 loop_type=0x2 */

  block_0130:
    if condition goto block_0185;

  block_0133:
    if ((Item.pop(item) != link) && ((Item.getStatus(item) & 0x1000) != 0)) goto block_0181;

  block_0159:
    /* create_list element_size=0x2 count=0x1 */
    /* append_list  */
    /* free_local_list bp_offset=0xF9 target=[BP-07h] */
    laserList = item;
    count = (1 + count);

  block_0181:
    /* loopnext  */
    goto block_0130;

  block_0185:
    if (count != 0) goto block_0198;

  block_0192:
    goto block_0485;

  block_0198:
    if 1 goto block_0485;

  block_01A0:
    inFastArea = 0;

  block_01B0:
    foreach_list item -> block_0428;

  block_01B5:
    h = Item.getCX(item);
    if (h & 8) goto block_01ED;

  block_01CE:
    /* create_list element_size=0x2 count=0x1 */
    /* remove_matching_inline element_size=0x2 */
    /* free_local_list bp_offset=0xF9 target=[BP-07h] */
    laserList = item;
    goto block_0422;

  block_01ED:
    if (Item.getStatus(item) & (0x1000 != 0)) goto block_0217;

  block_0203:
    /* create_list element_size=0x2 count=0x1 */
    /* remove_matching_inline element_size=0x2 */
    /* free_local_list bp_offset=0xF9 target=[BP-07h] */
    laserList = item;
    goto block_0422;

  block_0217:
    if ((Intrinsic002C(item) != 1) && (Intrinsic0016(item) != 0x0476)) goto block_0422;

  block_023A:
    inFastArea = (1 + inFastArea);
    if (h & 1) goto block_0281;

  block_024F:
    if (h & 2) goto block_0267;

  block_025A:
    h = (h & 4);
    goto block_0274;

  block_0267:
    h = ((h & 4) | 2);

  block_0274:

  block_0281:
    dir = -1;
    if (h & 2) goto block_029A;

  block_0293:
    dir = 1;

  block_029A:
    x = Intrinsic0013(item);
    y = Item.legal_create(item);
    if (Intrinsic0016(item) != 0x02C4) goto block_02E6;

  block_02CF:
    wp = (x + (dir * 16));
    local_03 = y;
    goto block_02FA;

  block_02E6:
    wp = x;
    local_03 = (y + (dir * 16));

  block_02FA:
    local_01 = Item.getZ(item);
    if (Item.pop(0, 0, wp, item) != 0) goto block_0341;

  block_0320:
    h = Item.getCX(item);
    goto block_041F;

  block_0341:
    if (h & 4) goto block_041F;

  block_034C:
    if (Intrinsic0016(item) != 0x02C4) goto block_03C2;

  block_0365:
    if (Intrinsic002F(wp, 0x02C3, arg_06) != 1) goto block_03B4;

  block_0387:
    /* bit_not  */
    goto block_03BF;

  block_03B4:

  block_03BF:
    goto block_041C;

  block_03C2:
    if (Intrinsic002F(wp, 0x02C4, arg_06) != 1) goto block_0411;

  block_03E4:
    /* bit_not  */
    goto block_041C;

  block_0411:

  block_041C:
    goto block_041F;

  block_041F:
    goto block_0422;

  block_0422:
    goto block_01B0;

  block_0428:
    spawn class_0A0C_slot_32(pid, 2, 0x00000000);
    suspend;
    if (inFastArea != 0) goto block_0482;

  block_0459:

  block_0462:
    foreach_list item -> block_047C;

  block_0467:
    /* bit_not  */
    goto block_0462;

  block_047C:
    goto block_0485;

  block_0482:
    goto block_0198;

  block_0485:
    /* free_local_list bp_offset=0xF9 target=[BP-07h] */
    return;

}
