function item_slot_27() /* entry=458 class_id=0x0A0C slot=0x27 */
{
  entry:
    set_info(1, *(arg_06));
    local_07 = Item.getX(arg_06);
    local_09 = Item.getY(arg_06);
    local_0A = Item.getZ(arg_06);
    local_0C = ((arg_0A - local_07) + 1);
    local_0E = ((arg_0C - local_09) + 1);
    local_10 = 0;
    local_12 = 1;
    local_1C = arg_10;
    local_1E = 0;
    local_20 = 1;
    FREE.slot_48(local_0C);
    FREE.slot_48(retval, local_0E);
    if retval goto block_0340;

  block_033C:
    local_20 = 0;

  block_0340:
    if (local_20 != 0) goto block_0393;

  block_0348:
    FREE.slot_48(((local_0E / local_0C) * local_0C));
    local_16 = retval;
    /* mod  */
    FREE.slot_48(local_0E, local_0C);
    local_14 = retval;
    if (local_0C < 0) goto block_0378;

  block_0371:
    local_1C = (-1 * arg_10);

  block_0378:
    if (local_0E < 0) goto block_0384;

  block_0380:
    local_12 = -1;

  block_0384:
    FREE.slot_48(local_0C);
    local_18 = retval;
    goto block_03DB;

  block_0393:
    FREE.slot_48(((local_0C / local_0E) * local_0E));
    local_16 = retval;
    /* mod  */
    FREE.slot_48(local_0C, local_0E);
    local_14 = retval;
    if (local_0E < 0) goto block_03C3;

  block_03BC:
    local_1C = (-1 * arg_10);

  block_03C3:
    if (local_0C < 0) goto block_03CF;

  block_03CB:
    local_12 = -1;

  block_03CF:
    FREE.slot_48(local_0E);
    local_18 = retval;

  block_03DB:
    suspend;
    local_24 = (local_0A & 0x00FF);
    local_22 = (arg_0E & 0x00FF);
    if (local_24 != local_22) goto block_0436;

  block_03F4:
    FREE.slot_48((local_22 - local_24));
    local_26 = ((retval / 20) + 1);
    if (local_26 != 0) goto block_0415;

  block_0411:
    local_26 = 1;

  block_0415:
    if (local_24 < local_22) goto block_0427;

  block_041D:
    local_0A = (local_0A + local_26);
    goto block_0436;

  block_0427:
    local_24 = (local_24 - local_26);
    local_0A = (local_24 & 0x00FF);

  block_0436:
    if (local_1E >= local_18) goto block_0484;

  block_043E:
    if (local_24 > (local_22 - 2)) goto block_045B;

  block_0449:
    if (local_24 < (local_22 + 2)) goto block_045B;

  block_0454:
    /* word_to_dword  */
    /* pop_result  */
    goto block_055F;

  block_045B:
    local_05 = local_07;
    local_03 = local_09;
    local_01 = local_0A;
    if (!Item.legalMoveToPoint(0, 1, local_05, arg_06)) goto block_0481;

  block_047A:
    /* word_to_dword  */
    /* pop_result  */
    goto block_055F;

  block_0481:
    goto block_055C;

  block_0484:
    local_1E = (local_1E + arg_10);
    if (local_20 != 0) goto block_04F9;

  block_0493:
    local_05 = local_07;
    local_03 = local_09;
    local_01 = local_0A;
    if (!Item.legalMoveToPoint(0, 1, local_05, arg_06)) goto block_04B9;

  block_04B2:
    /* word_to_dword  */
    /* pop_result  */
    goto block_055F;

  block_04B9:
    local_07 = (local_07 + local_1C);
    local_1A = 1;

  block_04C4:
    if (local_1A <= arg_10) goto block_04F6;

  block_04CC:
    local_10 = (local_10 + (local_14 + local_16));
    if (local_10 >= local_18) goto block_04EC;

  block_04DE:
    local_10 = (local_10 - local_18);
    local_09 = (local_09 + local_12);

  block_04EC:
    local_1A = (1 + local_1A);
    goto block_04C4;

  block_04F6:
    goto block_055C;

  block_04F9:
    local_05 = local_07;
    local_03 = local_09;
    local_01 = local_0A;
    if (!Item.legalMoveToPoint(0, 1, local_05, arg_06)) goto block_051F;

  block_0518:
    /* word_to_dword  */
    /* pop_result  */
    goto block_055F;

  block_051F:
    local_09 = (local_09 + local_1C);
    local_1A = 1;

  block_052A:
    if (local_1A <= arg_10) goto block_055C;

  block_0532:
    local_10 = (local_10 + (local_14 + local_16));
    if (local_10 >= local_18) goto block_0552;

  block_0544:
    local_10 = (local_10 - local_18);
    local_07 = (local_07 + local_12);

  block_0552:
    local_1A = (1 + local_1A);
    goto block_052A;

  block_055C:
    goto block_03DB;

  block_055F:
    return;

}
