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.getQLo(item);
    count = 0;
    /* loop_selector item in selector_0x42(arg0=0x02C3, arg1=0x02C4, arg2=(50 * 32), origin=ref) */

  block_0130:
    if condition goto block_0185;

  block_0133:
    if ((Item.getQLo(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.getQHi(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 ((Item.inFastArea(item) == 1) && (Item.getShape(item) != 0x0476)) {
      inFastArea = (1 + inFastArea);
      if (!(h & 1)) {
        if (!(h & 2)) {
          h = (h & 4);
        }
        else {
          h = ((h & 4) | 2);
        }
      }
      dir = -1;
      if (!(h & 2)) {
        dir = 1;
      }
      x = Item.getX(item);
      y = Item.getY(item);
      if (Item.getShape(item) == 0x02C4) {
        wp = (x + (dir * 16));
        local_03 = y;
      }
      else {
        wp = x;
        local_03 = (y + (dir * 16));
      }
      local_01 = Item.getZ(item);
      if (legalMoveToPoint(0, 0, wp, item) == 0) {
        h = Item.getQHi(item);
      }
      else if (!(h & 4)) {
        if (Item.getShape(item) == 0x02C4) {
          if (Intrinsic02F(wp, 0x02C3, arg_06) == 1) {
            /* bit_not  */
          }
        }
        else if (Intrinsic02F(wp, 0x02C4, arg_06) == 1) {
          /* bit_not  */
        }
      }
    }

  block_0422:
    goto block_01B0;

  block_0428:
    spawn FREE.waitNTimerTicks(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;

}
