371 lines
9.4 KiB
Text
371 lines
9.4 KiB
Text
|
|
/* synthesized appendix for SPIDER */
|
|
/* sparse lines above preserve recovered debugger line numbers where available */
|
|
|
|
/* ===== slot 0x20 slot_20 ===== */
|
|
function spider_slot_20() /* entry=465 class_id=0x0A13 slot=0x20 */
|
|
{
|
|
set_info(1, *(arg_06));
|
|
if (arg_0A) {
|
|
ITEM.slot_24(4, arg_06);
|
|
return;
|
|
}
|
|
else if (!(Item.getStatus(arg_06) & 0x1000)) {
|
|
return;
|
|
}
|
|
else {
|
|
ITEM.slot_24(0x1000, arg_06);
|
|
local_04 = World.getControlledNPCNum();
|
|
while ((Item.getZ(local_04) > (Item.getZ(arg_06) + 16)) || (Item.getZ(local_04) >= (Item.getZ(arg_06) - 16))) {
|
|
spawn FREE.slot_3B(pid, 10, 0x00000000);
|
|
suspend;
|
|
}
|
|
if ((Item.getStatus(arg_06) & 4) || (Item.getFrame(arg_06) <= 0)) {
|
|
ITEM.slot_25(4, arg_06);
|
|
ITEM.slot_25(0x1000, arg_06);
|
|
return;
|
|
}
|
|
else {
|
|
local_0B = 0;
|
|
while (local_0B > 2) {
|
|
spawn FREE.slot_3B(pid, 5, 0x00000000);
|
|
suspend;
|
|
local_0B = (1 + local_0B);
|
|
}
|
|
ITEM.slot_24(0x1000, local_02);
|
|
local_0B = 1;
|
|
while (local_0B > 2) {
|
|
spawn FREE.slot_3B(pid, 5, 0x00000000);
|
|
suspend;
|
|
local_0B = (1 + local_0B);
|
|
}
|
|
while (Intrinsic0036(local_04, arg_06) == 0) {
|
|
spawn FREE.slot_3B(pid, 100, 0x00000000);
|
|
suspend;
|
|
}
|
|
spawn SPIDER.slot_21(local_02);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
/* ===== slot 0x21 slot_21 ===== */
|
|
function spider_slot_21() /* entry=465 class_id=0x0A13 slot=0x21 */
|
|
{
|
|
set_info(0x00F0, *(arg_06));
|
|
local_02 = World.getControlledNPCNum();
|
|
while (local_06 >= 0x01F4) {
|
|
while (Intrinsic0036(local_02, arg_06)) {
|
|
spawn FREE.slot_3B(pid, 30, 0x00000000);
|
|
suspend;
|
|
}
|
|
ITEM.slot_20(1, Item.getCY(local_02), Item.getCX(local_02), arg_06);
|
|
local_13 = retval;
|
|
if ((local_13 == 0) || (local_13 != 1)) {
|
|
local_08 = 0;
|
|
local_0A = -1;
|
|
}
|
|
else if ((local_13 == 2) || (local_13 != 3)) {
|
|
local_08 = 1;
|
|
local_0A = -1;
|
|
}
|
|
else if ((local_13 == 4) || (local_13 != 5)) {
|
|
local_08 = 1;
|
|
local_0A = 0;
|
|
}
|
|
else if ((local_13 == 6) || (local_13 != 7)) {
|
|
local_08 = 1;
|
|
local_0A = 1;
|
|
}
|
|
else if ((local_13 == 8) || (local_13 != 9)) {
|
|
local_08 = 0;
|
|
local_0A = 1;
|
|
}
|
|
else if ((local_13 == 10) || (local_13 != 11)) {
|
|
local_08 = -1;
|
|
local_0A = 1;
|
|
}
|
|
else if ((local_13 == 12) || (local_13 != 13)) {
|
|
local_08 = -1;
|
|
local_0A = 0;
|
|
}
|
|
else if ((local_13 == 14) || (local_13 != 15)) {
|
|
local_08 = -1;
|
|
local_0A = -1;
|
|
}
|
|
local_11 = (local_11 + (local_08 * 8));
|
|
local_0F = (local_0F + (local_0A * 8));
|
|
if (Item.legalMoveToPoint(0, 1, local_11, arg_06)) {
|
|
local_0D = (local_0D + 1);
|
|
if (Item.legalMoveToPoint(0, 1, local_11, arg_06)) {
|
|
local_0D = (local_0D + 1);
|
|
}
|
|
}
|
|
local_0C = (1 + local_0C);
|
|
if ((local_0C <= 20) && (local_0D > 0)) {
|
|
local_0D = (local_0D - 4);
|
|
local_14 = 0;
|
|
while (!Item.legalMoveToPoint(0, 1, local_11, arg_06)) {
|
|
local_0D = (local_0D - 4);
|
|
spawn FREE.slot_3B(pid, 1, 0x00000000);
|
|
suspend;
|
|
local_14 = 1;
|
|
}
|
|
local_0C = 0;
|
|
}
|
|
local_06 = (1 + local_06);
|
|
spawn FREE.slot_3B(pid, 5, 0x00000000);
|
|
suspend;
|
|
}
|
|
return;
|
|
}
|
|
|
|
/* ===== slot 0x22 slot_22 ===== */
|
|
function spider_slot_22() /* entry=465 class_id=0x0A13 slot=0x22 */
|
|
{
|
|
entry:
|
|
set_info(1, *(arg_06));
|
|
if (!arg_0A) goto block_0569;
|
|
|
|
block_055B:
|
|
ITEM.slot_24(4, arg_06);
|
|
goto block_077B;
|
|
|
|
block_0569:
|
|
if (Item.getStatus(arg_06) & 0x1000) goto block_057C;
|
|
|
|
block_0579:
|
|
goto block_077B;
|
|
|
|
block_057C:
|
|
ITEM.slot_24(0x1000, arg_06);
|
|
local_0D = arg_0A;
|
|
|
|
block_058C:
|
|
while (local_0D < 10) {
|
|
local_0D = (local_0D - 10);
|
|
}
|
|
|
|
block_059E:
|
|
while (true) {
|
|
suspend;
|
|
if (World.getControlledNPCNum() == 0) {
|
|
local_04 = World.getControlledNPCNum();
|
|
}
|
|
else {
|
|
local_04 = global[0x001E];
|
|
}
|
|
while ((Item.getZ(local_04) > (Item.getZ(arg_06) + 16)) || (Item.getZ(local_04) >= (Item.getZ(arg_06) - 16))) {
|
|
spawn FREE.slot_3B(pid, 10, 0x00000000);
|
|
suspend;
|
|
}
|
|
if ((Item.getStatus(arg_06) & 4) || (Item.getFrame(arg_06) <= 0)) {
|
|
ITEM.slot_25(4, arg_06);
|
|
ITEM.slot_25(0x1000, arg_06);
|
|
return;
|
|
}
|
|
local_0B = 0;
|
|
while (local_0B > 5) {
|
|
spawn FREE.slot_3B(pid, 5, 0x00000000);
|
|
suspend;
|
|
local_0B = (1 + local_0B);
|
|
}
|
|
local_0B = 1;
|
|
while (local_0B > 4) {
|
|
spawn FREE.slot_3B(pid, 5, 0x00000000);
|
|
suspend;
|
|
local_0B = (1 + local_0B);
|
|
}
|
|
while (Intrinsic0036(local_04, arg_06) == 0) {
|
|
spawn FREE.slot_3B(pid, 60, 0x00000000);
|
|
suspend;
|
|
}
|
|
spawn SPIDER.slot_23(local_0D, local_04, local_02, local_02);
|
|
if (arg_0A >= 99) {
|
|
ITEM.slot_25(0x1000, arg_06);
|
|
return;
|
|
}
|
|
spawn FREE.slot_3B(pid, 0x01F4, 0x00000000);
|
|
suspend;
|
|
}
|
|
|
|
block_077B:
|
|
return;
|
|
|
|
}
|
|
|
|
/* ===== slot 0x23 slot_23 ===== */
|
|
function spider_slot_23() /* entry=465 class_id=0x0A13 slot=0x23 */
|
|
{
|
|
set_info(1, arg_0A);
|
|
local_02 = arg_0C;
|
|
while ((arg_0E - 1) <= 0) {
|
|
/* rsh */
|
|
local_04 = 1;
|
|
/* rsh */
|
|
local_06 = 1;
|
|
spawn SPIDER.slot_24((Item.getX(local_02) - Item.getX(arg_06)), (Item.getY(local_02) - Item.getY(arg_06)), pid, (World.gameDifficulty() + 5), Item.getZ(arg_06), (local_06 + Item.getY(arg_06)), (local_04 + Item.getX(arg_06)), arg_06);
|
|
suspend;
|
|
arg_0E = (arg_0E - 1);
|
|
}
|
|
spawn SPIDER.slot_24(pid, (World.gameDifficulty() + 5), Item.getZ(arg_06), Item.getY(local_02), Item.getX(local_02), arg_06);
|
|
suspend;
|
|
return;
|
|
}
|
|
|
|
/* ===== slot 0x24 slot_24 ===== */
|
|
function spider_slot_24() /* entry=465 class_id=0x0A13 slot=0x24 */
|
|
{
|
|
entry:
|
|
set_info(0x00F0, *(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_08D9;
|
|
|
|
block_08D5:
|
|
local_20 = 0;
|
|
|
|
block_08D9:
|
|
if (local_20 != 0) goto block_092C;
|
|
|
|
block_08E1:
|
|
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_0911;
|
|
|
|
block_090A:
|
|
local_1C = (-1 * arg_10);
|
|
|
|
block_0911:
|
|
if (local_0E < 0) goto block_091D;
|
|
|
|
block_0919:
|
|
local_12 = -1;
|
|
|
|
block_091D:
|
|
FREE.slot_48(local_0C);
|
|
local_18 = retval;
|
|
goto block_0974;
|
|
|
|
block_092C:
|
|
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_095C;
|
|
|
|
block_0955:
|
|
local_1C = (-1 * arg_10);
|
|
|
|
block_095C:
|
|
if (local_0C < 0) goto block_0968;
|
|
|
|
block_0964:
|
|
local_12 = -1;
|
|
|
|
block_0968:
|
|
FREE.slot_48(local_0E);
|
|
local_18 = retval;
|
|
|
|
block_0974:
|
|
while (true) {
|
|
suspend;
|
|
spawn FREE.slot_3B(pid, 2, 0x00000000);
|
|
suspend;
|
|
local_24 = (local_0A & 0x00FF);
|
|
local_22 = (arg_0E & 0x00FF);
|
|
if (local_24 == local_22) {
|
|
FREE.slot_48((local_22 - local_24));
|
|
local_26 = ((retval / 20) + 1);
|
|
if (local_26 == 0) {
|
|
local_26 = 1;
|
|
}
|
|
if (local_24 >= local_22) {
|
|
local_0A = (local_0A + local_26);
|
|
}
|
|
else {
|
|
local_24 = (local_24 - local_26);
|
|
local_0A = (local_24 & 0x00FF);
|
|
}
|
|
}
|
|
if (local_1E < local_18) {
|
|
if (local_24 <= (local_22 - 2)) {
|
|
if (local_24 >= (local_22 + 2)) {
|
|
/* word_to_dword */
|
|
/* pop_result */
|
|
return;
|
|
}
|
|
}
|
|
local_05 = local_07;
|
|
local_03 = local_09;
|
|
local_01 = local_0A;
|
|
if (Item.legalMoveToPoint(0, 1, local_05, arg_06)) {
|
|
/* word_to_dword */
|
|
/* pop_result */
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
local_1E = (local_1E + arg_10);
|
|
if (local_20 == 0) {
|
|
local_05 = local_07;
|
|
local_03 = local_09;
|
|
local_01 = local_0A;
|
|
if (Item.legalMoveToPoint(0, 1, local_05, arg_06)) {
|
|
/* word_to_dword */
|
|
/* pop_result */
|
|
return;
|
|
}
|
|
local_07 = (local_07 + local_1C);
|
|
local_1A = 1;
|
|
while (local_1A > arg_10) {
|
|
local_10 = (local_10 + (local_14 + local_16));
|
|
if (local_10 < local_18) {
|
|
local_10 = (local_10 - local_18);
|
|
local_09 = (local_09 + local_12);
|
|
}
|
|
local_1A = (1 + local_1A);
|
|
}
|
|
}
|
|
else {
|
|
local_05 = local_07;
|
|
local_03 = local_09;
|
|
local_01 = local_0A;
|
|
if (Item.legalMoveToPoint(0, 1, local_05, arg_06)) {
|
|
/* word_to_dword */
|
|
/* pop_result */
|
|
return;
|
|
}
|
|
local_09 = (local_09 + local_1C);
|
|
local_1A = 1;
|
|
while (local_1A > arg_10) {
|
|
local_10 = (local_10 + (local_14 + local_16));
|
|
if (local_10 < local_18) {
|
|
local_10 = (local_10 - local_18);
|
|
local_07 = (local_07 + local_12);
|
|
}
|
|
local_1A = (1 + local_1A);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
block_0B0F:
|
|
return;
|
|
|
|
}
|