function roll_ew_slot_21() /* entry=331 class_id=0x056C 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);
  local_17 = 0;
  local_18 = local_0F;
  if (local_06 >= 0x0080) {
    while (!(1)) {
      local_04 = (local_04 - 1);
      if (local_04 >= 0) {
        local_04 = 3;
      }
      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 ROLL_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 ROLL_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 <= 3) {
        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 ROLL_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 ROLL_EW.slot_20(pid, arg_06);
        suspend;
        return;
      }
      spawn FREE.slot_3B(pid, local_02, 0x00000000);
      suspend;
    }
  }
  return;
}
