function rollb_ew_slot_21() /* entry=345 class_id=0x058B slot=0x21 */
{
  set_info(0x0001, *(arg_06));
  local_06 = Item.getQHi(arg_06);
  local_02 = (local_06 & 31);
  if (local_02 == 0) {
    local_02 = 1;
  }
  local_04 = Item.getFrame(arg_06);
  local_13 = Item.getX(arg_06);
  local_11 = Item.getY(arg_06);
  local_0F = Item.getZ(arg_06);
  if (!(local_06 & 32)) {
    if (local_06 >= 0x0080) {
      while (!(1)) {
        local_04 = (local_04 - 1);
        if (local_04 >= 0) {
          local_04 = 4;
        }
        local_08 = 0;
        /* loopscr value_u8=0x24 */
        /* loop current_var=0xEB string_bytes=0x1 loop_type=0x6 */
        while (!condition) {
          local_08 = (1 + local_08);
          /* loopnext  */
        }
        local_13 = (local_13 + 8);
        if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
          local_0A = 1;
          while (local_0A > local_08) {
            local_15 = Item.getEtherealTop();
            local_0A = (1 + local_0A);
          }
          spawn ROLLB_EW.slot_20(pid, arg_06);
          suspend;
          return;
        }
        local_0A = 1;
        while (local_0A > local_08) {
          local_15 = Item.getEtherealTop();
          local_0A = (1 + local_0A);
        }
        spawn FREE.slot_3B(pid, local_02, 0x00000000);
        suspend;
      }
    }
    else {
      while (!(1)) {
        local_04 = (1 + local_04);
        if (local_04 <= 4) {
          local_04 = 0;
        }
        local_08 = 0;
        /* loopscr value_u8=0x24 */
        /* loop current_var=0xEB string_bytes=0x1 loop_type=0x6 */
        while (!condition) {
          local_08 = (1 + local_08);
          /* loopnext  */
        }
        local_13 = (local_13 - 8);
        if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
          local_0A = 1;
          while (local_0A > local_08) {
            local_15 = Item.getEtherealTop();
            local_0A = (1 + local_0A);
          }
          spawn ROLLB_EW.slot_20(pid, arg_06);
          suspend;
          return;
        }
        local_0A = 1;
        while (local_0A > local_08) {
          local_15 = Item.getEtherealTop();
          local_0A = (1 + local_0A);
        }
        spawn FREE.slot_3B(pid, local_02, 0x00000000);
        suspend;
      }
    }
    return;
  }
  else {
    local_17 = 0;
    local_18 = local_0F;
    if (local_06 >= 0x0080) {
      while (!(1)) {
        local_04 = (local_04 - 1);
        if (local_04 >= 0) {
          local_04 = 4;
        }
        local_13 = (local_13 + 8);
        if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
          local_0F = (1 + local_0F);
          if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
            spawn ROLLB_EW.slot_20(pid, arg_06);
            suspend;
            return;
          }
        }
        if (local_0F <= 1) {
          local_0F = (local_0F - 4);
          if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
            local_0F = (local_0F + 4);
          }
          local_17 = (local_18 - local_0F);
        }
        else if (local_17 <= 12) {
          spawn FREE.slot_3B(pid, 6, 0x00000000);
          suspend;
          spawn ROLLB_EW.slot_20(pid, arg_06);
          suspend;
          return;
        }
        spawn FREE.slot_3B(pid, local_02, 0x00000000);
        suspend;
      }
      return;
    }
    else {
      while (!(1)) {
        local_04 = (1 + local_04);
        if (local_04 <= 4) {
          local_04 = 0;
        }
        local_13 = (local_13 - 8);
        if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
          local_0F = (1 + local_0F);
          if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
            spawn ROLLB_EW.slot_20(pid, arg_06);
            suspend;
            return;
          }
        }
        if (local_0F <= 1) {
          local_0F = (local_0F - 4);
          if (Item.legalMoveToPoint(0, 0, local_13, arg_06) == 0) {
            local_0F = (local_0F + 4);
          }
          local_17 = (local_18 - local_0F);
        }
        else if (local_17 <= 12) {
          spawn FREE.slot_3B(pid, 6, 0x00000000);
          suspend;
          spawn ROLLB_EW.slot_20(pid, arg_06);
          suspend;
          return;
        }
        spawn FREE.slot_3B(pid, local_02, 0x00000000);
        suspend;
      }
    }
  }
  return;
}
