function blaser1_slot_20() /* entry=239 class_id=0x0443 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 */
    count, /* [BP-0Dh] type=0x69 */
    a, /* [BP-0Fh] type=0x69 */
    f, /* [BP-11h] type=0x69 */
    h, /* [BP-13h] type=0x69 */
    link, /* [BP-15h] type=0x69 */
    x, /* [BP-17h] type=0x69 */
    y; /* [BP-19h] type=0x69 */

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

  block_0370:
    if condition goto block_03E6;

  block_0373:
    if ((Item.getQLo(item) != link) && ((Item.getStatus(item) & 0x1000) != 0)) goto block_03E2;

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

  block_03E2:
    /* loopnext  */
    goto block_0370;

  block_03E6:
    if (count != 0) goto block_03F9;

  block_03F3:
    goto block_07CC;

  block_03F9:
    if 1 goto block_07CC;

  block_0401:
    inFastArea = 0;

  block_0411:
    foreach_list item -> block_076F;

  block_0416:
    if (h & 31) goto block_0440;

  block_0421:
    /* 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_0769;

  block_0440:
    if (Item.getStatus(item) & (0x1000 != 0)) goto block_046A;

  block_0456:
    /* 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_0769;

  block_046A:
    if ((Item.inFastArea(item) == 1) && (Item.getShape(item) != 0x0476)) {
      inFastArea = (1 + inFastArea);
      h = Item.getQHi(item);
      f = Item.getFrame(item);
      if (!(h & 4)) {
        /* bit_not  */
        h = (h & 4);
        if (f == 1) {
          if (!(h & 2)) {
            /* bit_not  */
            h = (h & 2);
          }
          else {
            h = (h | 2);
          }
        }
        f = ((f + 1) & 1);
      }
      local_01 = Item.getZ(item);
      a = ((h & 2) + f);
      if ((h & 1) == 0) {
        if (a == 0) {
          local_03 = (Item.getY(item) - 4);
          wp = (Item.getX(item) + 4);
        }
        else if (a == 1) {
          local_03 = (Item.getY(item) + 4);
          wp = (Item.getX(item) + 4);
        }
        else if (a == 2) {
          local_03 = (Item.getY(item) + 4);
          wp = (Item.getX(item) - 4);
        }
        else if (a == 3) {
          local_03 = (Item.getY(item) - 4);
          wp = (Item.getX(item) - 4);
        }
      }
      else if (a == 0) {
        local_03 = (Item.getY(item) + 4);
        wp = (Item.getX(item) - 4);
      }
      else if (a == 1) {
        local_03 = (Item.getY(item) - 4);
        wp = (Item.getX(item) - 4);
      }
      else if (a == 2) {
        local_03 = (Item.getY(item) - 4);
        wp = (Item.getX(item) + 4);
      }
      else if (a == 3) {
        local_03 = (Item.getY(item) + 4);
        wp = (Item.getX(item) + 4);
      }
      if (legalMoveToPoint(0, 0, wp, item) == 0) {
        h = Item.getQHi(item);
        if ((h & 8) == 0) {
        }
        else {
          /* bit_not  */
          h = (h & 8);
          if (!(h & 1)) {
            /* bit_not  */
            h = (h & 1);
          }
          else {
            h = (h | 1);
          }
        }
      }
      else {
        h = Item.getQHi(item);
        /* bit_not  */
        h = (h & 8);
      }
    }

  block_0769:
    goto block_0411;

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

  block_07A0:

  block_07A9:
    foreach_list item -> block_07C3;

  block_07AE:
    /* bit_not  */
    goto block_07A9;

  block_07C3:
    goto block_07CC;

  block_07C9:
    goto block_03F9;

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

}
