function item_slot_28() /* entry=458 class_id=0x0A0C slot=0x28 */
{
  entry:
    set_info(1, *(arg_06));
    local_02 = Item.getX(arg_06);
    local_04 = Item.getY(arg_06);
    local_05 = Item.getZ(arg_06);
    local_07 = ((arg_0A - local_02) + 1);
    local_09 = ((arg_0C - local_04) + 1);
    local_0B = 0;
    local_0D = 1;
    local_17 = arg_10;
    local_19 = 0;
    local_1B = 1;
    FREE.slot_48(local_07);
    FREE.slot_48(retval, local_09);
    if retval goto block_05CF;

  block_05CB:
    local_1B = 0;

  block_05CF:
    if (local_1B != 0) goto block_0622;

  block_05D7:
    FREE.slot_48(((local_09 / local_07) * local_07));
    local_11 = retval;
    /* mod  */
    FREE.slot_48(local_09, local_07);
    local_0F = retval;
    if (local_07 < 0) goto block_0607;

  block_0600:
    local_17 = (-1 * arg_10);

  block_0607:
    if (local_09 < 0) goto block_0613;

  block_060F:
    local_0D = -1;

  block_0613:
    FREE.slot_48(local_07);
    local_13 = retval;
    goto block_066A;

  block_0622:
    FREE.slot_48(((local_07 / local_09) * local_09));
    local_11 = retval;
    /* mod  */
    FREE.slot_48(local_07, local_09);
    local_0F = retval;
    if (local_09 < 0) goto block_0652;

  block_064B:
    local_17 = (-1 * arg_10);

  block_0652:
    if (local_07 < 0) goto block_065E;

  block_065A:
    local_0D = -1;

  block_065E:
    FREE.slot_48(local_09);
    local_13 = retval;

  block_066A:
    suspend;
    local_1F = (local_05 & 0x00FF);
    local_1D = (arg_0E & 0x00FF);
    if (local_1F != local_1D) goto block_06C5;

  block_0683:
    FREE.slot_48((local_1D - local_1F));
    local_21 = ((retval / 20) + 1);
    if (local_21 != 0) goto block_06A4;

  block_06A0:
    local_21 = 1;

  block_06A4:
    if (local_1F < local_1D) goto block_06B6;

  block_06AC:
    local_05 = (local_05 + local_21);
    goto block_06C5;

  block_06B6:
    local_1F = (local_1F - local_21);
    local_05 = (local_1F & 0x00FF);

  block_06C5:
    if (local_19 >= local_13) goto block_06F7;

  block_06CD:
    if (local_1F > (local_1D - 2)) goto block_06E6;

  block_06D8:
    if (local_1F < (local_1D + 2)) goto block_06E6;

  block_06E3:
    goto block_07A2;

  block_06E6:
    goto block_079F;

  block_06F7:
    local_19 = (local_19 + arg_10);
    if (local_1B != 0) goto block_0754;

  block_0706:
    local_02 = (local_02 + local_17);
    local_15 = 1;

  block_071F:
    if (local_15 <= arg_10) goto block_0751;

  block_0727:
    local_0B = (local_0B + (local_0F + local_11));
    if (local_0B >= local_13) goto block_0747;

  block_0739:
    local_0B = (local_0B - local_13);
    local_04 = (local_04 + local_0D);

  block_0747:
    local_15 = (1 + local_15);
    goto block_071F;

  block_0751:
    goto block_079F;

  block_0754:
    local_04 = (local_04 + local_17);
    local_15 = 1;

  block_076D:
    if (local_15 <= arg_10) goto block_079F;

  block_0775:
    local_0B = (local_0B + (local_0F + local_11));
    if (local_0B >= local_13) goto block_0795;

  block_0787:
    local_0B = (local_0B - local_13);
    local_02 = (local_02 + local_0D);

  block_0795:
    local_15 = (1 + local_15);
    goto block_076D;

  block_079F:
    goto block_066A;

  block_07A2:
    return;

}
